昨天介紹了 FanGraphs 這個網站,讓大家對這個數據網站有的資訊有初步的了解。今天會從 pybaseball 上的 FanGraphs 打擊資料開始介紹。
用來取得 FanGraphs Leaderboard 的打擊資料,官方文件提供 5 個參數使用:
start_season
:開始的球季,會依據這個參數獲得以他為起點的數據。需為整數,必填。舉例來說如果要查找今年的資料,就會是 batting_stats(2023)
。
end_season
:結束的球季,配合前面的參數,獲得所選範圍的資料,如果不填這個欄位的話會只抓 start_season
所填入的球季。
league
:字串,可以篩選想要的聯盟,all
取得全部資料、al
取得美聯資料、nl
取得國聯資料。另外在這個 PR 有提到也能尋找其他聯盟像是 黑人聯盟(Negro League) 的資料,不過會需要注意年分,不然可能會得到錯誤訊息,我有另外開一個 Issue 反應這個問題。預設是 all
。
qual
:資料最小打席數,預設值是 None
但程式會幫我們轉成上一篇提到的 Qualified,也就是 3.1 * 球隊出賽數的打席數。
ind
:當我們選複數以上的球季,又想直接獲得這些球季的數據總和,可以把這個參數設為 ind=0
,程式會自動幫我們加總或平均相關數據。不過要注意一點,Source Code 上面寫說這個參數已經棄用,如果要用相似的功能要用 split_seasons
。 True
的話會把各季分出來,False
的話會總和。預設為 True
,雖然他的註解寫 False
但程式碼是 True
。
範例:
from pybaseball import batting_stats
# 2023 打擊排行榜資料
data = batting_stats(2023)
# 2023 最小打席數 50 的打擊排行榜資料
data = batting_stats(2023, qual=50)
# 2023 美聯的打擊排行榜資料
data = batting_stats(2023, league="al")
# 2023 黑人聯盟的打擊排行榜資料
# data = batting_stats(2023, league="mnl") 2023 沒有資料會出錯
data = batting_stats(1940, league="mnl")
# 2020 - 2023 打擊排行榜資料
data = batting_stats(2020, 2023)
# 2020 - 2023 打擊排行榜資料資料總和
data = batting_stats(2020, 2023, split_seasons=False)
由於回傳的資料龐大,我就不提供表格,大家可以自己玩玩看各種參數組合。我想提的一點是回傳的欄位,可以發現,在沒調整參數的情況,會有 319 個欄位 (我們可以執行 data.columns
來知道回傳的 DataFrame
有多少欄位)。
會那麼多的原因是 pybaseball 的預設是把 Fangraphs 上所有可能抓下來,之後會打算有一篇去帶大家看 Source Code,那時候會再做更詳細的解說。
如果想要只拿到自己想要的欄位,就會需要傳入 stat_columns
這個參數。他要帶的資料為一個字串或是一個字串陣列,會需要知道不同欄位的代表字串,可以從 batting_data_enum.py 這個檔案知道對應的字串。
範例:
batting_stats(2023, stat_columns=['1','2','3','4','5','6','7','8', 'SO'])
結果 (前五名):
如同上一篇的介紹,這個 method 會抓下來的資料是 FanGraphs 所排的打擊排行榜數據,會依照 WAR 做排序。有了這些資料,我們可以大致了解現在大聯盟最火燙的打者們有哪些,以及他們的各項進階數據,也可以藉此使用機械學習之類的演算法,知道各項數據的相關性。
再更延伸的運用,可以使用上面提到的 splits_season=False
參數來獲得球員的累積資料,來知道球員的生涯累積。
如果想要只看一位球員的資料的話,其實也可以辦到,只需要加 players
這個參數並代入想搜尋的球員 ID,就能獲得數據,players
可以是一個字串或是一個字串陣列。有趣的是他也會照 FanGraphs 的標準 (WAR) 去做排序,所以也可以比較不同球員或是同個球員不同球季的排名。
範例:
# 大谷翔平與 Cody Bellinger 2020 - 2023 成績排名
# qual 要設成 0 不然不符合最小打席會搜不到
batting_stats(2020, 2023, players=[19755, 15998], qual=0)
結果:
今天介紹了可以取得 FanGraphs Leaderboard 打擊資料的 batting_stats
method,感謝大家耐心地看完。其實還有其他參數我沒介紹到,官方文件也沒提供,會需要自己看程式碼,不過剩下的都是比較少用到的,可能等之後介紹原始碼的時候再多介紹。關於欄位的部分也因為實在太多種類,我也會另外開一篇介紹裡面一些我覺得挺重要或有趣的進階數據,這樣可能會比較好吸收。打擊完明天換介紹投球數據,希望大家會喜歡,也歡迎任何留言討論或是發現我有任何錯誤提醒我,再次感謝大家的閱讀。
本日的範例程式:https://colab.research.google.com/drive/1i3JytNE8nhgr6R_1YW0tvMKo1_a84i30?usp=sharing